package dominio;

import java.util.List;

import logica.Area;
import logica.UsuarioRegistrado;
import persistencia.DAL;
import excepciones.DAOExcepcion;
import excepciones.DominioExcepcion;

public class Controlador {

	private DAL dal;
	private static Controlador control;

	// **********************************************************************
	// Creaci�n del controlador
	// Un �nico controlador para todos los C.U.
	// **********************************************************************

	private Controlador() throws DominioExcepcion {
		try {
			// Objeto para comunicarse con la capa de acceso a datos
			dal = DAL.dameDAL();
		} catch (DAOExcepcion e) {
			throw new DominioExcepcion(e);
		}
	}

	// ****************************************************************************
	// Para el C.U. Mostrar Usuarios Registrados
	// ****************************************************************************
	public List<UsuarioRegistrado> encontrarUsuariosRegistrados() throws DominioExcepcion {
		try {
			return dal.encontrarUsuariosRegistrados();
		} catch (DAOExcepcion e) {
			e.printStackTrace();
			throw new DominioExcepcion(e);
		}
	}

	// ****************************************************************************
	// Para el C.U. Crear Usuario Registrado
	// ****************************************************************************
	public void crearUsuarioRegistrado(UsuarioRegistrado u) throws DominioExcepcion {
		try {
			if (dal.encontrarUsuarioRegistradoPorNif(u.getNif()) == null) {
				dal.crearUsuarioRegistrado(u);
			} else {
				throw new DominioExcepcion("El usuario ya existe.");
			}
		} catch (DAOExcepcion e) {
			throw new DominioExcepcion(e);
		}
	}

	// ****************************************************************************
	// Para el C.U. buscar persona por nif
	// ****************************************************************************

	public UsuarioRegistrado encontrarUsuarioRegistradoPorNif(String nif) throws DominioExcepcion {
		try {
			return dal.encontrarUsuarioRegistradoPorNif(nif);
		} catch (DAOExcepcion e) {
			throw new DominioExcepcion(e);
		}
	}

	// ****************************************************************************
	// Para el C.U. Mostrar Areas
	// ****************************************************************************
	public List<Area> encontrarAreas() throws DominioExcepcion {
		try {
			return dal.encontrarAreas();
		} catch (DAOExcepcion e) {
			throw new DominioExcepcion(e);
		}
	}

	// ****************************************************************************
	// Para el C.U. Crear Area
	// ****************************************************************************
	public void crearArea(Area u) throws DominioExcepcion {
		try {
			if (dal.encontrarAreaPorNombre(u.getNombre()) == null) {
				dal.crearArea(u);
			} else {
				throw new DominioExcepcion("El Area ya existe.");
			}
		} catch (DAOExcepcion e) {
			throw new DominioExcepcion(e);
		}
	}

	// singleton
	public static Controlador dameControlador() throws DominioExcepcion {
		if (control == null)
			control = new Controlador();
		return control;
	}

}
